﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A87参数修饰符
{
    //ref   out    params
    class Program
    {
        static void Main1(string[] args)
        {
            int a = 5;
            Fun(ref a);
            Console.WriteLine(a);//6
        }

        static void Fun(ref int a) 
        {
            a = 6;
        }

        static void Main2(string[] args)
        {
            //测试练习1
            int a = 6;
            int b = 7;
            ExChange(ref a,ref b);
            Console.WriteLine($"a:{a} b:{b}");
        }

        //练习1 做一个交换两个整数变量值的方法
        static void ExChange(ref int a,ref int b) 
        {
            int temp = a;
            a = b;
            b = temp;
        }

        //out 参数修饰符   传递方式和ref一样    返回方法前必须对out参数赋值

        static void Main3(string[] args)
        {
            //测试out练习
            float x = 8;
            float y = 10;
            float avg;
           float max= Test(x,y,out avg);
            Console.WriteLine( "平均值:{0} 最大值:{1}",avg,max );
        }

        //out练习 比如要在一个方法中同时求最大值和平均值
        static float Test(float a,float b,out float avg) 
        {
            float max = a > b ? a : b;
            avg = (a + b) / 2;//给avg赋值
            return max;//返回最大值
        }
        //params 参数数组
        static void Main4(string[] args)
        {
            //测试  params 参数数组  案例
   
            float sum = GetSum( 2, 1.2f, 3.1f);
        }

        //params 参数数组  案例
        static float GetSum(  params float[] array) 
        {
            float sum = 0;
            for (int i = 0; i < array.Length; i++)
            {
                sum += array[i];
            }
            return sum;
        }

        //TryParse 中使用到了out修饰符
        static void MainA(string[] args)
        {
            //  int a = int.Parse("A");   报错

            string input = Console.ReadLine();
            int num;
            if (int.TryParse(input, out num))
            {
                Console.WriteLine("转换成功:"+num);
            }
            else
            {
                Console.WriteLine("转换失败");
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("请输入一个整数:");
            int n;
            while (!int.TryParse(Console.ReadLine(),out n))
            {
                Console.Clear();//清空控制台
                Console.WriteLine("格式不正确,请重新输入:");
            }
            Console.WriteLine(n);
        }
    }
}
